﻿using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using System.Data;

namespace ImportFromSql
{
    public class MoveData
    {
        public static void MoveFromSqlToSPList(DataTable dataTable,
           string siteUrl,
           string listName, Dictionary<string, string> fieldMap,
           string sharepointKey,
           string slqKey)
        {
            using (SPSite site = new SPSite(siteUrl))
            using (SPWeb web = site.OpenWeb())
            {
                SPList list = web.Lists[listName];
                // Перебираем все строки в таблице
                foreach (DataRow item in dataTable.Rows)
                {
                    SPListItem spli = CreateOrUpdateItem(sharepointKey, slqKey, list, item);
                    // Перебираем все поля которые мы обновляем
                    foreach (KeyValuePair<string, string> field in fieldMap)
                    {
                        try
                        {
                            SPField f = list.Fields.GetFieldByInternalName(field.Key);
                            // присваиваем значение 
                            if (f.Type == SPFieldType.DateTime)
                            {
                                DateTime d;
                                if (DateTime.TryParse(item[field.Value].ToString(), out d))
                                    spli[f.Id] = d;
                            }
                            else
                                spli[f.Id] = item[field.Value].ToString();
                        }
                        catch (ArgumentException ex) 
                        {
                            Console.WriteLine("Проверьте правильность сопоставления полей. " + ex.Message);
                        }
                    }
                    // spli["Source"] = "SQL";
                    // обновляем элемент списка
                    try
                    {
                        spli.Update();
                    }
                    catch { Console.Write("Произошла ошибка при обновлении элемента"); }
                }
            }
        }
        
        /// <summary>
        /// Делаем запрос для получения элемента списка.
        /// </summary>
        /// <param name="sharepointKey">Ключевое поле в списке Sharepoint</param>
        /// <param name="xmlKey">Ключевое поле в импортируемом файле</param>
        /// <param name="list">Список шарепоинт</param>
        /// <param name="currentRow">Элемент в импортируемом файле</param>
        /// <returns></returns>
        private static SPListItem CreateOrUpdateItem(string sharepointKey, string xmlKey, SPList list, DataRow currentRow)
        {
            // Делаем запрос к списку для определения есть ли элемент в списке
            SPQuery query = new SPQuery();
            query.Query = string.Format(@"<Where>
      <Eq>
         <FieldRef Name='{0}' />
         <Value Type='Text'>{1}</Value>
      </Eq>
   </Where>", sharepointKey, currentRow[xmlKey].ToString());

            SPListItemCollection coll = list.GetItems(query);            
            SPListItem spli = null;
            if (coll.Count >0 )
                spli = coll[0];
            else
                spli = list.Items.Add();
            return spli;
        }
    }
}
